package com.abner.seven.principle.segregation.improve;

/**
 * 设计模式七大原则:
 * 		接口隔离原则: 客户端不应该依赖它不需要的接口，即一个类对另一个类的依赖应该建立在最小的接口上
 * @author abner
 */
public class Segregation2 {

	public static void main(String[] args) {

		A a = new A();
		a.depend1(new B());
		a.depend2(new B());
		a.depend3(new B());

		C c = new C();
		c.depend1(new D());
		c.depend4(new D());
		c.depend5(new D());
	}

}

interface Interface1 {
	/**
	 * 方法一
	 */
	void operation1();
}

interface Interface2 {
	/**
	 * 方法一
	 */
	void operation2();
	/**
	 * 方法二
	 */
	void operation3();
}

interface Interface3 {
	/**
	 * 方法一
	 */
	void operation4();
	/**
	 * 方法二
	 */
	void operation5();
}

class B implements Interface1, Interface2 {
	@Override
	public void operation1() {
		System.out.println("B 实现了 operation1");
	}

	@Override
	public void operation2() {
		System.out.println("B 实现了 operation2");
	}

	@Override
	public void operation3() {
		System.out.println("B 实现了 operation3");
	}

}

class D implements Interface1, Interface3 {
	@Override
	public void operation1() {
		System.out.println("D 实现了 operation1");
	}

	@Override
	public void operation4() {
		System.out.println("D 实现了 operation4");
	}

	@Override
	public void operation5() {
		System.out.println("D 实现了 operation5");
	}
}

class A {
	public void depend1(Interface1 i) {
		i.operation1();
	}

	public void depend2(Interface2 i) {
		i.operation2();
	}

	public void depend3(Interface2 i) {
		i.operation3();
	}
}

class C {
	public void depend1(Interface1 i) {
		i.operation1();
	}

	public void depend4(Interface3 i) {
		i.operation4();
	}

	public void depend5(Interface3 i) {
		i.operation5();
	}
}